package com.ybu;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @ProjectName: shixun
 * @Titile: StreamDemo
 * @Author: Jie
 * @Description: TODO
 */
public class StreamDemo {
    public static void main(String[] args) {
        test3();
    }

    private static void test0() {
        //创建一个集合，存储多个字符串元素
        List<String> names = new ArrayList<>();
        names.add("张三");
        names.add("李四");
        names.add("王五");
        names.add("赵六");
        names.add("张三1");
        names.add("张三2");
        names.add("张三3");
        //把集合中所有以“张”开头的元素存到一个新集合中
        List<String> list1 = new ArrayList<>();
        //遍历names集合
        names.forEach((name)->{
            //startsWith以什么开头
            if(name.startsWith("张")){
                list1.add(name);
            }
        });
        List<String> list2 = new ArrayList<>();
        names.forEach((name)->{
            if(name.length()==3){
                list2.add(name);
            }
        });
        list2.forEach(System.out::println);

        System.out.println("------------------------------------------");
        //1.获取集合的流对象Stream对象
        //2.筛选，获取符合要求的元素
        //3.终结方法
//        names.stream().filter(new Predicate<String>() {
//            @Override
//            public boolean test(String s) {
//                return s.startsWith("张");
//            }
//        });
        //Lambda表达式
        names.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(System.out::println);
    }

    public static void test1(){
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.add(9);
        list.add(10);
        //最后调用收集方法
//        List<Integer> list1 = list.stream().filter(integer -> integer % 2 == 0).collect(Collectors.toList());
        List<Integer> list1 = list.stream().filter(integer -> integer % 2 == 0).toList();
        System.out.println(list1);
    }
    public static void test2(){
        List<String> list = new ArrayList<>();
        list.add("张三,23");
        list.add("李四,24");
        list.add("王五,25");
//        Map<Object, Object> map = list.stream().filter(new Predicate<String>() {
//            @Override
//            public boolean test(String s) {
//                //将s分开
//                String[] split = s.split(",");
//                int age = Integer.parseInt(split[1]);
//                return age > 23;
//
//
//            }
//        }).collect(Collectors.toMap(new Function<String, Object>() {
//            @Override
//            public Object apply(String s) {
//                String[] split = s.split(",");
//                return split[0];
//            }
//        }, new Function<String, Object>() {
//            @Override
//            public Object apply(String s) {
//                String[] split = s.split(",");
//                return split[1];
//            }
//        }));
        //Lambda表达式
        Map<Object, Object> map = list.stream().filter(s -> {
            //将s分开
            String[] split = s.split(",");
            int age = Integer.parseInt(split[1]);
            return age > 23;
        }).collect(Collectors.toMap(s -> {
            String[] split = s.split(",");
            return split[0];
        }, s -> {
            String[] split = s.split(",");
            return split[1];
        }));
        map.forEach((k,v)-> System.out.println(k+"---"+v));
    }

    //流的合并
    public static void test3(){
        List<String> list1 = new ArrayList<>();
        list1.add("邓超");
        list1.add("周杰伦");
        list1.add("马林");
        list1.add("李健");
        list1.add("赵雷");
        list1.add("李健国");
        List<String> list2 = new ArrayList<>();
        list2.add("陈丽丽");
        list2.add("张三");
        list2.add("王五");
        list2.add("赵六");
        list2.add("杨雷");
        list2.add("杨幂");


        Stream<String> stream1 = list1.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {

                return s.length() ==3;
            }
        }).limit(2);
        Stream<String> stream2 = list2.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {

                return s.startsWith("杨");
            }
        }).skip(1);
        //skip表示跳过第几个
        Stream.concat(stream1,stream2).forEach(System.out::println);


    }
}

